$def with (page, opts)

$code:
  prices = opts.get('prices')
  isbn = opts.get('isbn', '')
  asin = opts.get('asin', '')

  bwb = {
    'key': 'betterworldbooks',
    'analytics_key': 'BetterWorldBooks',
    'name': _('Better World Books'),
    'link': 'https://www.anrdoezrs.net/links/%s/type/dlg/http://www.betterworldbooks.com/%s' % (
      affiliate_id('betterworldbooks'),
      ('-id-%s.aspx' % isbn) if isbn else ('search/results?q=' + page.title)
    ),
    'price_note': _(' - includes shipping')
  }

  amazon = {
    'key': 'amazon',
    'analytics_key': 'Amazon',
    'name': _('Amazon'),
    'link': 'https://www.amazon.com/dp/%s/?tag=%s' % (asin or isbn, affiliate_id('amazon')),
  } if (asin or isbn) else None

  bookshop = {
    'key': 'bookshop-org',
    'analytics_key': 'BookshopOrg',
    'name': _('Bookshop.org'),
    'link': 'https://bookshop.org/a/%s/%s' % (affiliate_id('bookshop-org'), isbn),
  } if isbn else None

  # Fetch price data
  if not is_bot() and prices and isbn:
    bwb_metadata = get_betterworldbooks_metadata(isbn)
    bwb['price'] = bwb_metadata and bwb_metadata.get('price')
    if amazon:
      amazon['price'] = bwb_metadata and bwb_metadata.get('market_price')
    if amazon and not amazon['price']:
      amz_metadata = get_amazon_metadata(isbn, resources='prices')
      amazon['price'] = amz_metadata and amz_metadata.get('price')

  stores = [store for store in [bwb, amazon, bookshop] if store]

$def affiliate_link(key, analytics_key, name, link, price='', price_note=''):
  <li class="prices-$key">
      <a href="$link"
         title="$_('Look for this edition for sale at %(store)s', store=name)"
         data-ol-link-track="BuyLink|$analytics_key"
         target="_blank">$name</a>

      $if price:
        <br>
        <span name="price">$price$price_note</span>
  </li>

<ul class="buy-options-table">
    $for store in stores:
      $:affiliate_link(store['key'], store['analytics_key'], store['name'], store['link'], store.get('price', ''), store.get('price_note', ''))
</ul>
